package com.mp.db.jpa.modelo;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
@NamedQueries({
@NamedQuery(name="SessaoUsuario.findByLogin", query="SELECT su FROM SessaoUsuario su WHERE su.usuario.login = :login and su.flagAtiva = :flag ORDER BY su.dataSessao desc"),
@NamedQuery(name="SessaoUsuario.findById", query="SELECT su FROM SessaoUsuario su WHERE su.idSessao = :id"),
@NamedQuery(name="SessaoUsuario.findByLastId", query="SELECT su FROM SessaoUsuario su WHERE su.usuario.idUsuario = :idUsuario and su.flagAtiva = :flag ORDER by su.idSessao desc"),
})
public class SessaoUsuario  implements Serializable
{
    
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int idSessao;
    
    @Column
    @Temporal(TemporalType.TIMESTAMP)
    private java.util.Date dataSessao = new Date();
    
    @Transient
    private int limiteSessao = 20;
    
    @Column
    private String flagAtiva =  "S";
    
  
    @ManyToOne(fetch= FetchType.EAGER)
    @JoinColumn(name="idusuario")
    private Usuario usuario;

    /**
     * @return the idSessao
     */
    public int getIdSessao() {
        return idSessao;
    }

    /**
     * @param idSessao the idSessao to set
     */
    public void setIdSessao(int idSessao) {
        this.idSessao = idSessao;
    }

    /**
     * @return the dataSessao
     */
    public Date getDataSessao() {
        return dataSessao;
    }

    public Date getDataSessaoLimite() 
    {
       Calendar cal = Calendar.getInstance();
       cal.setTime(getDataSessao());
       cal.add(Calendar.MINUTE, getLimiteSessao());
       return cal.getTime();
    }
    
    /**
     * @param dataSessao the dataSessao to set
     */
    public void setDataSessao(Date dataSessao) {
        this.dataSessao = dataSessao;
    }

    /**
     * @return the usuario
     */
    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }
    
    
    public int getLimiteSessao() {
        return limiteSessao;
    }

    public void setLimiteSessao(int limiteSessao) {
        this.limiteSessao = limiteSessao;
    }
    
    public String getFlagAtiva() {
        return flagAtiva;
    }

    public void setFlagAtiva(String flagAtiva) {
        this.flagAtiva = flagAtiva;
    }
    
}
